﻿// Inner Fire 游戏引擎库
// DirectX 基础工具类
//
// Copyright (c) 2024 by 尔西大帝. All rights reserved.
//
// 所有的Dx类都需要引用此类，做最基础的工作。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2024-11-30

#include "dx_core.h"
#include "dx_element.h"
#include "dx_utils.h"
#include "dx_exception.h"
#include <winerror.h>
#include <string>
#include <comdef.h>
#include <kstring.h>



namespace ifire::dx {
  

DxElement::DxElement(int index, ikit::sstr name)
    : index_(index), name_(name), uid_(DxUtils::ObtainInstancedId()) {
}

///////////////////////////////////////////////////////////////////////////////
// DxException
///////////////////////////////////////////////////////////////////////////////

#pragma region DxException
DxException::DxException(HRESULT hr, const std::string& functionName,
    const std::string& filename, int lineNumber)
    : ErrorCode(hr)
    , FunctionName(functionName)
    , Filename(filename)
    , LineNumber(lineNumber) {}


std::string DxException::ToString() const {
  // 获取错误代码的字符串描述。
  _com_error err(ErrorCode);
  std::string msg = ikit::from_wide(err.ErrorMessage());

  return FunctionName + " failed in " + Filename + "; line " +
         std::to_string(LineNumber) + "; error: " + msg;
}
#pragma endregion

} // namespace ifire::dx
